package com.me.myFramework.myAop.aop300.intercept.method;

import com.me.myFramework.myAop.aop300.intercept.Interceptor;

/**
 * 自己实现 AOP-300：  <p></p>
 *
 * （执行增强逻辑的执行器）执行方法执行前增强逻辑的拦截器。本质上，拦截器是个 适配器，把统一的 API 适配成各种增强模板
 *
 * 为什么需要这个拦截器呢？ 因为各种增强的执行逻辑不一样，出入参也不一样。
 * 通过额外抽象出来的执行类，组合各种增强（方法前、正常返回、异常返回）的模板类，然后对外暴露统一的调用方法用以屏蔽增强调用的细节。
 *
 * @author ME
 * @date 2021/9/26
 */
public interface MethodInterceptor extends Interceptor {

    /**
     * 定义切面执行顺序的模板方法，如：方法执行前的切点
     *
     * @param mi
     * @return
     * @throws Throwable Throwable
     */
    Object invoke(MethodInvocation mi) throws Throwable;

}
